A typical software development project will involve many different source code modules and files that are being worked on by teams of software developers and other team members such as documentation writers. In addition, the typical software development project will have a reasonably long life cycle of development, testing, release, and maintenance. In order track changes over time, version control systems have been developed to aid teams of software developers and others to maintain the often complex code associated with a particular development project. Version control systems of the prior art typically provide versioning only for source code files and modules comprising the development project.
While the source code files that comprise a software product are a requirement, they are not the only objects involved in the software development process. For example, design documents and bug or issue reports are also part of many software development projects. These objects may be stored in different systems, in different formats, and in different physical regions of a computer system.
The above-described objects often have logical associations between them. For example, a bug report will typically be associated with one or more of the modules and source files that make up a software product. Furthermore, certain features of the software may be described in specification documents. It is desirable to associate these documents with the source code files that implement the feature.
Previous systems have provided limited ability to associate issues with source code changes. Examples of such systems include ClearCase from Rational Software Corp. and PVCS from Merant Intl. Ltd. However, a disadvantage of these and other systems is that while they can associate issues with source code, they do not provide a generalized mechanism to associate a variety of development objects with one another. Furthermore, they do not provide the ability to maintain multiple versions of such associations. Thus, these systems lack the ability to perform temporal queries to recreate the state of project associations at arbitrary points in time.
Therefore, there is a need in the art for a system that maintains versions of project associations in a manner that saves all of the previous state of the associations, and that can be queried to produce set of associations for a project as they were at a particular point in time.